<?php
 
	/**
	 * 数据库连接类
	 * 
	 */
	// 用DB继承PDO后，就会拥有pdo的所有方法
	class DB extends PDO {
		// 几个关键的配置属性
		private $host;  //服务器
		private $user;   //用户名
		private $password;  //密码
		private $dbname;   //要连接的数据库
		private $table;  //指定操作的表


		public function __construct($config){
			// 初始化配置，从配置文件读取数据库的配置
			// 配置文件应该单独定义，然后require进来即可
			$this->host = $config['DB_HOST'];
			$this->user = $config['DB_USER'];
			$this->password = $config['DB_PASS'];
			$this->dbname = $config['DB_NAME'];
			// 初始化的时候就连接上数据库，更好的方法是用单例模式，以后再优化
			try{
				// 这里把配置提取出来
				// 因为我们DB类已经继承了PDO类，也就是继承类PDO类的construct方法
				// 所以我们直接调用父类的construct方法来初始化
			    parent::__construct("mysql:host=".$this->host.";dbname=".$this->dbname.";charset=utf8",$this->user,$this->password);
			}catch(PDOException $e){
				// 发生错误了，应该返回一个错误信息数组给调用者
				// PDOException很多方法，我也不是很清楚，先不要管错误的情况
				$err = array(
					// 'error_msg'=>$e->
				);

				// 直接返回错误信息
				return false;
			}
		}



		// 组织语句前，要先知道用户想操作哪张表
		// 所以在执行改语句前，要让用户先指定表，做一个table方法来实现
		public function table($table){
			$this->table = $table;
			// 我们在调用该方法完成以后，可以返回数据库的句柄对象，供下一个方法调用
			// 类似Jquery的 $('#id')->css('3')->show();
			// 名词叫：  链式调用
			// 返回自己

			return $this;
		}

		// 实现图示的方法
		// 增
		public function add($data){
			// 新增就是INSERT INTO ....
			// 所以要先组织sql语句

			// 一般传入的data是一个数组或者对象
			// 我们这里以关联数组为例
			/*
				示例数据：
				array(
					'username'=>'潘莹',
					'age'=>'18'
				);
				因为我们并不知道有多少个字段，所以，循环数组是必须的
				
				sql完整插入示例：
				INSERT INTO  `test`.`user` (
				`id` ,    --字段   这里，数组的索引就是字段
				`username` ,
				`age`
				)
				VALUES (
				NULL , 
				'蛇鬼',  --值    数组的值就是插入的值
				 '18'
				);


			*/
			// 字段字符串
			$field = '';
			// 值字符串
			$val = '';
			// 循环
			foreach ($data as $key => $value) {
				// 			`id` ,`username` ,`age`
				$field .= '`'.$key.'`,';  
				$val .= "'$value',";
			}
			// 最后`username`,`age`,  多出一个, 所以要截断
			$field = mb_substr($field,0,-1,'utf8');
			$val = mb_substr($val,0,-1,'utf8');
			$sql = "INSERT INTO `$this->dbname`.`$this->table`  (
					$field
				)
				VALUES (
					$val 
				);
				";
			// 执行pdo的execute方法
			return $this->exec($sql);
		}
        // 删除
        public function delete(){}
        // 改
        public function update(){}
        // 查询1个
        public function find(){}
        // 查询多个
        public function select(){}


	}












